home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / wics.zip / DLGTMPLT.CPP < prev    next >
C/C++ Source or Header  |  1993-03-05  |  4KB  |  165 lines

  1. //==============================================================================================
  2. //
  3. //    Windows Interface Construction Set
  4. //    Version 1.00
  5. //
  6. //    DLGTMPLT.CPP - Dialog Template Class Source File
  7. //    Copyright ⌐ 1993 by Microdyne Development Technologies.
  8. //    All rights reserved.
  9. //==============================================================================================
  10.  
  11. #include <windows.h>
  12. #include <dlgtmplt.h>
  13. #include <string.h>
  14.  
  15. TDialogTemplate::TDialogTemplate(DWORD lStyle, WORD x, WORD y, WORD cx, WORD cy, LPSTR lpClass, Pchar lpCaption)
  16. {
  17.     LPDIALOGBOXHEADER    lpDialog ;
  18.     LPSTR                lpText;
  19.     WORD FAR *            lpWord;
  20.  
  21.     if ( lpClass )
  22.         if ( lpCaption )
  23.             wSize = 16 + _fstrlen(lpClass) + strlen(lpCaption) ;
  24.         else
  25.             wSize = 17 + _fstrlen(lpClass) ;
  26.     else
  27.         if ( lpCaption )
  28.             wSize = 17 + strlen(lpCaption) ;
  29.         else
  30.             wSize = 18;
  31.  
  32.     lStyle &= (~DS_SETFONT);
  33.  
  34.     //    Allocate the structure
  35.  
  36.     hTemplate = GlobalAlloc (GHND, wSize);
  37.  
  38.     lpDialog = (LPDIALOGBOXHEADER) GlobalLock (hTemplate);
  39.     lpText   = (LPSTR) lpDialog;
  40.  
  41.     *((DWORD FAR *) lpText) = lStyle;    lpText += 4;
  42.     *lpText++ = 0;
  43.     *((WORD FAR *) lpText) = x;            lpText += 2;
  44.     *((WORD FAR *) lpText) = y;            lpText += 2;
  45.     *((WORD FAR *) lpText) = cx;        lpText += 2;
  46.     *((WORD FAR *) lpText) = cy;        lpText += 2; 
  47.  
  48.     *lpText++ = 0x00 ;
  49.  
  50.     if ( lpClass )
  51.     {
  52.         _fstrcpy ( lpText, lpClass);
  53.         lpText = ( lpText + _fstrlen(lpText) + 1) ;
  54.     }
  55.     else
  56.         *lpText++ = 0x00;
  57.  
  58.     if ( lpCaption )
  59.     {
  60.         _fstrcpy ( lpText, lpCaption);
  61.         lpText = ( lpText + _fstrlen(lpText) + 1) ;
  62.     }
  63.     else
  64.         *lpText++ = 0x00 ;
  65.  
  66.     GlobalUnlock (hTemplate);
  67. }
  68.  
  69. TDialogTemplate::~TDialogTemplate()
  70. {
  71.     GlobalFree (hTemplate);
  72. }
  73.  
  74. void TDialogTemplate::AssignMenu (Pchar lpMenuName)
  75. {
  76.     HGLOBAL                hTemp ;
  77.     LPDIALOGBOXHEADER    lpDialog ;
  78.     LPDIALOGBOXHEADER    lpSource ;
  79.     LPSTR                lpText;
  80.     LPSTR                lpSrcText;
  81.     PWORD                lpWord;
  82.  
  83.     hTemp = GlobalAlloc (GHND, wSize + strlen(lpMenuName));
  84.  
  85.     lpSource = (LPDIALOGBOXHEADER) GlobalLock(hTemplate);
  86.     lpDialog = (LPDIALOGBOXHEADER) GlobalLock(hTemp);
  87.  
  88.     lpSrcText = (LPSTR) (lpSource+1);
  89.     lpText    = (LPSTR) (lpDialog+1);
  90.  
  91.     _fmemmove ( lpDialog, lpSource, 13);
  92.  
  93.     _fstrcpy (lpText, lpMenuName);
  94.     lpText += (strlen(lpMenuName) + 1) ;
  95.  
  96.     _fmemmove ( lpText, lpSrcText, wSize - 13);
  97.  
  98.     GlobalUnlock (hTemplate);
  99.     GlobalUnlock (hTemp);
  100.     GlobalFree (hTemplate);
  101.  
  102.     wSize += _fstrlen(lpMenuName);
  103.     hTemplate = hTemp;
  104. }
  105.  
  106. void TDialogTemplate::AddControl (DWORD lStyle, WORD id, WORD x, WORD y, WORD cx, WORD cy, LPSTR lpClass, Pchar lpCaption)
  107. {
  108.     HGLOBAL                hTemp;
  109.     WORD                wNewSize;
  110.     LPDIALOGBOXHEADER    lpDialog;
  111.     LPDIALOGBOXHEADER    lpSource;
  112.     LPCONTROLDATA        lpControl;
  113.     LPSTR                lpText;
  114.  
  115.     wNewSize = wSize + sizeof(CONTROLDATA) + 3 ;
  116.  
  117.     if ( FP_SEG(lpClass) != 0 )
  118.         wNewSize += _fstrlen(lpClass);
  119.  
  120.     if ( lpCaption )
  121.         wNewSize += strlen(lpCaption);            
  122.  
  123.     hTemp = GlobalAlloc (GHND, wNewSize);
  124.  
  125.     lpSource  = (LPDIALOGBOXHEADER) GlobalLock (hTemplate);
  126.     lpDialog  = (LPDIALOGBOXHEADER) GlobalLock (hTemp);
  127.     lpControl = (LPCONTROLDATA)(((LPSTR) lpDialog) + wSize);
  128.     lpText    = (LPSTR) lpControl + sizeof(CONTROLDATA) ;
  129.  
  130.     _fmemmove (lpDialog, lpSource, wSize);
  131.  
  132.     lpDialog->bNumberOfItems++;
  133.  
  134.     lpControl->x      = x;
  135.     lpControl->y      = y;
  136.     lpControl->cx     = cx;
  137.     lpControl->cy     = cy;
  138.     lpControl->wID    = id;
  139.     lpControl->lStyle = lStyle;
  140.  
  141.     if ( FP_SEG(lpClass) == 0x00 )
  142.         *lpText++ = (BYTE) lpClass;
  143.     else
  144.     {
  145.         _fstrcpy (lpText, lpClass);
  146.         lpText += (_fstrlen(lpClass) + 1);
  147.     }
  148.  
  149.     if ( lpCaption )
  150.     {
  151.         _fstrcpy ( lpText, lpCaption );
  152.         lpText += (strlen(lpCaption) + 1);
  153.     }
  154.     else
  155.         *lpText++ = 0x00;
  156.  
  157.     *lpText++ = 0x00 ;
  158.  
  159.     GlobalUnlock (hTemplate);
  160.     GlobalUnlock (hTemp);
  161.     GlobalFree   (hTemplate);
  162.  
  163.     wSize = wNewSize;
  164.     hTemplate = hTemp;
  165. }